javascript:(function () {

/**
 * 
 * SETT Browser for Android
 * Sinhala-English-Tamil Trilingual rendering supported 
 * mobile web-browser for Android
 *  
 * Copyright (C) 2010 Dhanika Kaushalya Perera.
 * Contact: dhanikaperera@gmail.com
 * http://sett-browser.googlecode.com
 *  
 * This JavaScript is the native script rendering engine 
 * of this browser. Currently this rendering engine supports 
 * Sinhala & Tamil complex scripts. Rendering is done by 
 * mapping the complex script text in pages to the character 
 * equivalents of a customized trilingual unicode web font 
 * (DhanikaSett.ttf) & injecting new CSS rules to render the 
 * mapped text in that trilingual web font.
 * 
 */

var Unicode = new Array();
var SettUni = new Array();
var UnicodeK = new Array();
var SettUniK = new Array();
var UnicodeH = new Array();
var SettUniH = new Array();
var SinhalaUnicodeStart = 3458;
var SinhalaUnicodeEnd = 3572;
var TamilUnicodeStart = 2947;
var TamilUnicodeEnd = 3058;
var KhmerUnicodeStart = 6016;
var KhmerUnicodeEnd = 6143;
var HindiUnicodeStart = 2304;
var HindiUnicodeEnd = 2431;

/**
 * CHARACTER MAPPING 
 */
 
Unicode[0]='ශ්‍රී';         	SettUni[0]='໹';
Unicode[1]='ද්‍ර';				SettUni[1]='຿';
Unicode[2]='ක්‍ෂ';  		  	SettUni[2]='໺';
Unicode[3]='ළු';         	SettUni[3]='໸';
Unicode[4]='ළූ';        		SettUni[4]='໸๡';
		
Unicode[5]='බ්‍රේ';      		SettUni[5]='๧໣๫';
Unicode[6]='ඩ්‍රේ';      		SettUni[6]='๧຋๫';
Unicode[7]='ධ්‍රේ';      		SettUni[7]='๧໎๫';
Unicode[8]='ඹ්‍රේ';      		SettUni[8]='๧໩๫';
Unicode[9]='ඛ්‍රේ';      		SettUni[9]='๧๳๫';
Unicode[10]='බ්‍රේ';      		SettUni[10]='๧໣๫';
Unicode[11]='ච්‍රේ';      		SettUni[11]='๧๷๫';
Unicode[12]='ම්‍රේ';     		SettUni[12]='๧໦๫';
Unicode[13]='ට්‍රේ';      		SettUni[13]='๧຀๫';
Unicode[14]='ව්‍රේ';      		SettUni[14]='๧໵๫';
Unicode[15]='ධ්‍රේ';      		SettUni[15]='๧໎๫';
								
Unicode[16]='ඹේ';     		SettUni[16]='๧໩';
Unicode[17]='ඡේ';      		SettUni[17]='๧๺';
Unicode[18]='ඪේ';      		SettUni[18]='๧ຑ';
Unicode[19]='ඛේ';      		SettUni[19]='๧๳';
Unicode[20]='ඬේ';      		SettUni[20]='๧ຘ';
Unicode[21]='බේ';      		SettUni[21]='๧໣';
Unicode[22]='චේ';      		SettUni[22]='๧๷';
Unicode[23]='ඩේ';      		SettUni[23]='๧຋';
Unicode[24]='මේ';      		SettUni[24]='๧໦';
Unicode[25]='ජේ';      		SettUni[25]='๧๽';
Unicode[26]='ටේ';      		SettUni[26]='๧຀';
Unicode[27]='වේ';      		SettUni[27]='๧໵';
Unicode[28]='ධේ';      		SettUni[28]='๧໎';

Unicode[29]='ර්‍(.)';  		SettUni[29]='$1๭';
Unicode[30]='(.)්‍රෝ';		SettUni[30]='๧$1๫๟๞';
Unicode[31]='(.)්‍රො';  		SettUni[31]='๧$1๫๟';
Unicode[32]='(.)්‍රේ';    	SettUni[32]='๧$1๫๞';
Unicode[33]='(.)්‍රෞ'; 		SettUni[33]='๧$1๫๨';
Unicode[34]='(.)්‍රෙ';   		SettUni[34]='๧$1๫';
Unicode[35]='(.)්‍රෛ';   	SettUni[35]='๧๧$1๫';
Unicode[36]='(.)්‍යෝ';  		SettUni[36]='๧$1๯๟๞';
Unicode[37]='(.)්‍යො';  		SettUni[37]='๧$1๯๟';
Unicode[38]='(.)්‍යෙ';  		SettUni[38]='๧$1๯';
Unicode[39]='(.)්‍ය';  		SettUni[39]='$1๯';
Unicode[40]='(.)ෛ'; 		SettUni[40]='๧๧$1';
Unicode[41]='(.)ෞ';  		SettUni[41]='๧$1๨';
Unicode[42]='(.)ෝ'; 		SettUni[42]='๧$1๟๞';
Unicode[43]='(.)ො';   		SettUni[43]='๧$1๟';
Unicode[44]='(.)ේ';   		SettUni[44]='๧$1๞';
Unicode[45]='(.)ෙ';   		SettUni[45]='๧$1';
Unicode[46]='්‍ර';      		SettUni[46]='๫';

Unicode[47]='๧ර๞';      		SettUni[47]='๧໮';
Unicode[48]='තු';      		SettUni[48]='ත๩';
Unicode[49]='ගු';      		SettUni[49]='ග๩';
Unicode[50]='ශු';      		SettUni[50]='ශ๩';
Unicode[51]='කු';      		SettUni[51]='ක๩';
Unicode[52]='භු';      		SettUni[52]='භ๩';
Unicode[53]='ඟු';      		SettUni[53]='ඟ๩';
Unicode[54]='තූ';      		SettUni[54]='ත๪';
Unicode[55]='ගූ';      		SettUni[55]='ග๪';
Unicode[56]='ශූ';      		SettUni[56]='ශ๪';
Unicode[57]='කූ';      		SettUni[57]='ක๪';
Unicode[58]='භූ';      		SettUni[58]='භ๪';
Unicode[59]='ඟූ';      		SettUni[59]='ඟ๪';
Unicode[60]='රු';      		SettUni[60]='ර๠';
Unicode[61]='රූ';      		SettUni[61]='ර๡';
Unicode[62]='ඳි';      		SettUni[62]='໛';
Unicode[63]='ඳී';      		SettUni[63]='ໞ';
Unicode[64]='දූ';      		SettUni[64]='຾';
Unicode[65]='දී';      		SettUni[65]='ຬ';
Unicode[66]='ලූ';      		SettUni[66]='໴';
Unicode[67]='ඳූ';      		SettUni[67]='ໟ';
Unicode[68]='ඨි';      		SettUni[68]='ຆ';
Unicode[69]='ඨී';      		SettUni[69]='ຉ';
Unicode[70]='ඛ්';      		SettUni[70]='๳';
Unicode[71]='ඛි';      		SettUni[71]='๴';
Unicode[72]='ලු';      		SettUni[72]='໳';
Unicode[73]='ඛී';      		SettUni[73]='๵';
Unicode[74]='දි';      		SettUni[74]='ຩ';
Unicode[75]='ච්';      		SettUni[75]='๷';
Unicode[76]='ර්';      		SettUni[76]='໮';
Unicode[77]='රී';      		SettUni[77]='໲';
Unicode[78]='ඪි';      		SettUni[78]='ຏ';
Unicode[79]='ඪී';      		SettUni[79]='ຐ';
Unicode[80]='චි';      		SettUni[80]='๸';
Unicode[81]='ථි';      		SettUni[81]='຦';
Unicode[82]='ථී';      		SettUni[82]='ຨ';
Unicode[83]='ජී';      		SettUni[83]='๿';
Unicode[84]='චී';      		SettUni[84]='๹';
Unicode[85]='ඞ්';      		SettUni[85]='๶';
Unicode[86]='ඵී';      		SettUni[86]='໢';
Unicode[87]='ට්';      		SettUni[87]='຀';
Unicode[88]='ඵි';      		SettUni[88]='໡';
Unicode[89]='රි';      		SettUni[89]='໱';
Unicode[90]='ටී';      		SettUni[90]='຅';
Unicode[91]='ටි';      		SettUni[91]='຃';
Unicode[92]='ඩ්';      		SettUni[92]='຋';
Unicode[93]='ඩී';      		SettUni[93]='ຎ';
Unicode[94]='ඩි';      		SettUni[94]='ຌ';
Unicode[95]='ඬ්';      		SettUni[95]='ຘ';
Unicode[96]='ඬි';      		SettUni[96]='ຠ';
Unicode[97]='ධ්';      		SettUni[97]='໎';
Unicode[98]='ඬී';      		SettUni[98]='຤';
Unicode[99]='ධි';      		SettUni[99]='໏';
Unicode[100]='ධී';      		SettUni[100]='໚';
Unicode[101]='බි';      		SettUni[101]='໤';
Unicode[102]='බ්';      		SettUni[102]='໣';
Unicode[103]='බී';      		SettUni[103]='໥';
Unicode[104]='ම්';      		SettUni[104]='໦';
Unicode[105]='ජි';      		SettUni[105]='๾';
Unicode[106]='මි';      		SettUni[106]='໧';
Unicode[107]='ඹ්';      		SettUni[107]='໩';
Unicode[108]='මී';      		SettUni[108]='໨';
Unicode[109]='ඹි';      		SettUni[109]='໪';
Unicode[110]='ව්';      		SettUni[110]='໵';
Unicode[111]='ඹී';      		SettUni[111]='໫';
Unicode[112]='ඳු';      		SettUni[112]='ໟ';
Unicode[113]='වී';      		SettUni[113]='໷';
Unicode[114]='වි';      		SettUni[114]='໶';
Unicode[115]='ඞ්';      		SettUni[115]='๶';
Unicode[116]='ඡි';      		SettUni[116]='๻';
Unicode[117]='ඡ්';      		SettUni[117]='๺';
Unicode[118]='දු';      		SettUni[118]='຺';
Unicode[119]='ජ්';     		SettUni[119]='๽';
Unicode[120]='ණි';      		SettUni[120]='ຒ';
Unicode[121]='ණී';      		SettUni[121]='ຓ';
Unicode[122]='ජී';      		SettUni[122]='๿';
Unicode[123]='ඡී';      		SettUni[123]='๼';
Unicode[124]='ඩි';      		SettUni[124]='ຌ';
Unicode[125]='ඤු';      		SettUni[125]='๬๱຺';
Unicode[126]='රැ';      		SettUni[126]='໯';
Unicode[127]='රෑ';      		SettUni[127]='໰';

Unicode[128]='ං';      		SettUni[128]='๜';
Unicode[129]='ඃ';      		SettUni[129]='๝';
Unicode[130]='ැ';      		SettUni[130]='๠';
Unicode[131]='ෑ';      		SettUni[131]='๡';
Unicode[132]='ෙ';      	SettUni[132]='๧';
Unicode[133]='ු';      		SettUni[133]='๤';
Unicode[134]='ි';      		SettUni[134]='๢';
Unicode[135]='ූ';      		SettUni[135]='๥';
Unicode[136]='ී';      		SettUni[136]='๣';
Unicode[137]='ෘ';      		SettUni[137]='๦';
Unicode[138]='ෲ';      	SettUni[138]='๦๦';
Unicode[139]='ෟ';      		SettUni[139]='๨';
Unicode[140]='ා';      		SettUni[140]='๟';
Unicode[141]='්';      		SettUni[141]='๞';
Unicode[142]='◌';      		SettUni[142]='໻';

Unicode[143]='ஸ்ரீ';       	SettUni[143]='஘';
		
Unicode[144]='கு';       	SettUni[144]='஢';
Unicode[145]='கூ';       	SettUni[145]='஌';
Unicode[146]='ஙு';       	SettUni[146]='஖';  
Unicode[147]='ஙூ';       	SettUni[147]='஖';  
Unicode[148]='சு';       	SettUni[148]='௒';
Unicode[149]='சூ';       	SettUni[149]='௒஗';	
Unicode[150]='ஞு';       	SettUni[150]='஖';  
Unicode[151]='ஞூ';       	SettUni[151]='஖';  	
Unicode[152]='டு';       	SettUni[152]='஬';
Unicode[153]='டூ';       	SettUni[153]='௅';
Unicode[154]='ணு';       	SettUni[154]='௄';
Unicode[155]='ணூ';       	SettUni[155]='௄௑';	
Unicode[156]='து';       	SettUni[156]='஧';
Unicode[157]='தூ';       	SettUni[157]='஧௑';	
Unicode[158]='நு';       	SettUni[158]='஡';
Unicode[159]='நூ';       	SettUni[159]='஡௑';
Unicode[160]='னு';       	SettUni[160]='஠';
Unicode[161]='னூ';       	SettUni[161]='஠௑';		
Unicode[162]='பு';       		SettUni[162]='஥';
Unicode[163]='பூ';       	SettUni[163]='஥஗';	
Unicode[164]='மு';       	SettUni[164]='஫';
Unicode[165]='மூ';       	SettUni[165]='஖';	
Unicode[166]='யு';       	SettUni[166]='஛';
Unicode[167]='யூ';       	SettUni[167]='஛஗';	
Unicode[168]='ரு';       	SettUni[168]='஼';
Unicode[169]='ரூ';       	SettUni[169]='஑';		
Unicode[170]='லு';       	SettUni[170]='௃';
Unicode[171]='லூ';       	SettUni[171]='௃௑';			
Unicode[172]='ளு';       	SettUni[172]='஺';
Unicode[173]='ளூ';       	SettUni[173]='஺௓';				
Unicode[174]='வு';       	SettUni[174]='஻';
Unicode[175]='வூ';       	SettUni[175]='஻஗';			
Unicode[176]='ழு';       	SettUni[176]='஭';
Unicode[177]='ழூ';       	SettUni[177]='஖';
Unicode[178]='று';       	SettUni[178]='஽';
Unicode[179]='றூ';       	SettUni[179]='஽௑';
Unicode[180]='டி';       	SettUni[180]='௎';
Unicode[181]='டீ';       	SettUni[181]='஝';

Unicode[182]='(.)ௌ';    	SettUni[182]='௖$1௛';
Unicode[183]='(.)ோ';   	SettUni[183]='௘$1௓';
Unicode[184]='(.)ொ';   	SettUni[184]='௖$1௓';
Unicode[185]='(.)ெ';      	SettUni[185]='௖$1';
Unicode[186]='(.)ே';      	SettUni[186]='௘$1';
Unicode[187]='(.)ை';      	SettUni[187]='௙$1';

Unicode[188]='ா';       	SettUni[188]='௓';
Unicode[189]='ி';       	SettUni[189]='௔';
Unicode[190]='ீ';       	SettUni[190]='௕';
Unicode[191]='ு';       	SettUni[191]='௏';
Unicode[192]='ூ';       	SettUni[192]='௉';
Unicode[193]='்';       	SettUni[193]='௚';
Unicode[194]='◌';      		SettUni[194]='໻';

UnicodeK[0]='្ក';         	SettUniK[0]='';
UnicodeK[1]='្ខ';				SettUniK[1]='';
UnicodeK[2]='្គ';  			SettUniK[2]='';
UnicodeK[3]='្ឃ';         	SettUniK[3]='';
UnicodeK[4]='្ង';        		SettUniK[4]='';
UnicodeK[5]='្ច';         	SettUniK[5]='';
UnicodeK[6]='្ឆ';         	SettUniK[6]='';
UnicodeK[7]='្ជ';         	SettUniK[7]='';
UnicodeK[8]='្ឈ';         	SettUniK[8]='';
UnicodeK[9]='្ញ';         	SettUniK[9]='';
UnicodeK[10]='្ដ';         	SettUniK[10]='';
UnicodeK[11]='្ឋ';         	SettUniK[11]='';
UnicodeK[12]='្ឌ';         	SettUniK[12]='';
UnicodeK[13]='្ឍ';         	SettUniK[13]='';
UnicodeK[14]='្ណ';         	SettUniK[14]='';
UnicodeK[15]='្ត';         	SettUniK[15]='';
UnicodeK[16]='្ថ';         	SettUniK[16]='';
UnicodeK[17]='្ទ';         	SettUniK[17]='';
UnicodeK[18]='្ធ';         	SettUniK[18]='';
UnicodeK[19]='្ន';         	SettUniK[19]='';
UnicodeK[20]='្ប';         	SettUniK[20]='';
UnicodeK[21]='្ផ';         	SettUniK[21]='';
UnicodeK[22]='្ព';         	SettUniK[22]='';
UnicodeK[23]='្ភ';         	SettUniK[23]='';
UnicodeK[24]='្ម';         	SettUniK[24]='';
UnicodeK[25]='្យ';         	SettUniK[25]='';
UnicodeK[26]='្រ';         	SettUniK[26]='';
UnicodeK[27]='្ល';         	SettUniK[27]='';
UnicodeK[28]='្វ';         	SettUniK[28]='';
UnicodeK[29]='្ស';         	SettUniK[29]='';
UnicodeK[30]='្ហ';         	SettUniK[30]='';
UnicodeK[31]='្អ';         	SettUniK[31]='';

UnicodeH[0]='(.)ि';         	SettUniH[0]='ि$1';

settrender();

/**
 * CHECK FOR THE PAGE HEAD & BODY 
 */

function settrender(){	
	//var dtEnd, dtStart = new Date();
	if(location.href && document.getElementsByTagName("HEAD")[0] && document.getElementsByTagName("BODY")[0]){
		replaceInTextNodes(document.body);												
	}
	//dtEnd = new Date();
	//var nMSeconds = dtEnd.valueOf() - dtStart.valueOf();
	//alert("Duration: " + nMSeconds);
}


/**
 * INJECT @FONT-FACE CSS RULE INTO THE PAGE IF NECCESSARY 
 */
 
function injectCSS(){
	var cssStatus = false;
	var	css = 
	'@font-face {font-family: "dhanikasett"; src: url(http://www.bhasha.lk/dev/DhanikaSETT.ttf);} sett {font-family: "dhanikasett"; font-size: 120%}';
	if(document.getElementsByTagName("style")[0]){
		var style = document.getElementsByTagName("style")[0];	
		for (var child=style.firstChild; child!==null; child=child.nextSibling) {
			if(child.data==css){
				cssStatus = true;
				break;
			}
		}
		if (!cssStatus) {
			style.appendChild(document.createTextNode(css));
		}
	} 
	else {
		var style = document.createElement("style");
		style.type = "text/css";
		document.getElementsByTagName("HEAD")[0].appendChild(style);
		style.appendChild(document.createTextNode(css));
	}
}

function injectKmCSS(){
	var cssStatus = false;
	var	css = 
	'@font-face {font-family: "khmerSett"; src: url(http://www.bhasha.lk/dev/KhmerSETT.ttf);} sett {font-family: "khmerSett"; font-size: 100%}';
	if(document.getElementsByTagName("style")[0]){
		var style = document.getElementsByTagName("style")[0];	
		for (var child=style.firstChild; child!==null; child=child.nextSibling) {
			if(child.data==css){
				cssStatus = true;
				break;
			}
		}
		if (!cssStatus) {
			style.appendChild(document.createTextNode(css));
		}
	} 
	else {
		var style = document.createElement("style");
		style.type = "text/css";
		document.getElementsByTagName("HEAD")[0].appendChild(style);
		style.appendChild(document.createTextNode(css));
	}
}

function injectHindiCSS(){
	var cssStatus = false;
	var	css = 
	'@font-face {font-family: "HindiSett"; src: url(http://www.bhasha.lk/dev/DhanikaSETTHindi.ttf);} sett {font-family: "HindiSett"; font-size: 100%}';
	if(document.getElementsByTagName("style")[0]){
		var style = document.getElementsByTagName("style")[0];	
		for (var child=style.firstChild; child!==null; child=child.nextSibling) {
			if(child.data==css){
				cssStatus = true;
				break;
			}
		}
		if (!cssStatus) {
			style.appendChild(document.createTextNode(css));
		}
	} 
	else {
		var style = document.createElement("style");
		style.type = "text/css";
		document.getElementsByTagName("HEAD")[0].appendChild(style);
		style.appendChild(document.createTextNode(css));
	}
}



/**
 * CHECK FOR SINHALA & TAMIL UNICODE TEXT IN THE PAGE & RENDER THEM BY REPLACING 
 * WITH THEIR DHANIKASETT.TTF CUSTOM TRILINGUAL UNICODE FONT EQUIVALENTS
 */			
 
function replaceInTextNodes(parent) {
	for (var child=parent.firstChild; child!==null; child= child.nextSibling) {
	
		if (child.nodeType===1) { //ELEMENT_NODE
			var tag= child.tagName.toLowerCase();
			if (tag!=='script' && tag!=='style' && tag!=='textarea' && tag!=='sett' && tag!=='br')
				replaceInTextNodes(child);
		}
		
		else if (child.nodeType===3) { //TEXT_NODE
		    var text = child.data;
		    for (i=0; i<text.length; i++){
		    
		    	//CHECK FOR SINHALA UNICODE TEXT & RENDER THEM
		    
  				if (text.charCodeAt(i)>= SinhalaUnicodeStart && text.charCodeAt(i)<= SinhalaUnicodeEnd){
  					injectCSS();
  					for (i=0;i<143;i++) {
  						var unicode = new RegExp(Unicode[i], "g");
  						text = text.replace(unicode, SettUni[i]);
  					}
					var sett = document.createElement("sett");
					sett.appendChild(document.createTextNode(text));
					parent.replaceChild(sett, child);
					break;
				}
				
				//CHECK FOR TAMIL UNICODE TEXT & RENDER THEM
				
				else if (text.charCodeAt(i)>= TamilUnicodeStart && text.charCodeAt(i)<= TamilUnicodeEnd){
					injectCSS();				
					for (i=143;i<195;i++) {
  						var unicode = new RegExp(Unicode[i], "g");
  						text = text.replace(unicode, SettUni[i]);
  					}
					var sett = document.createElement("sett");
					sett.appendChild(document.createTextNode(text));
					parent.replaceChild(sett, child);
					break;
					
				}
  				
				else if (text.charCodeAt(i)>= KhmerUnicodeStart && text.charCodeAt(i)<= KhmerUnicodeEnd){
  					injectKmCSS();
  					for (i=0;i<32;i++) {
  						var unicodeK = new RegExp(UnicodeK[i], "g");
  						text = text.replace(unicodeK, SettUniK[i]);
  					}
					var sett = document.createElement("sett");
					sett.appendChild(document.createTextNode(text));
					parent.replaceChild(sett, child);
					break;
				}
  				
				else if (text.charCodeAt(i)>= HindiUnicodeStart && text.charCodeAt(i)<= HindiUnicodeEnd){
  					injectHindiCSS();
  					for (i=0;i<1;i++) {
  						var unicodeH = new RegExp(UnicodeH[i], "g");
  						text = text.replace(unicodeH, SettUniH[i]);
  					}
					var sett = document.createElement("sett");
					sett.appendChild(document.createTextNode(text));
					parent.replaceChild(sett, child);
					break;
				}
			}
		}
	}
}


})();